package Day11.polymorphic05;
/*
   方案一：我们通过定义两个feed重载方法，来达到饲养猫和鸟的目的
         如果将来再来100种动物，我们要想饲养100种动物，
         还需定义100种feed方法，这样的话代码复用性很低
   方案二：

 */
public class Person {
/*    //人饲养猫
                              //Cat c=cat=new Cat()
    public void feed(Cat c) {//Cat c=new Cat();
        c.eat();
        c.catchMouse();
    }
    //人饲养鸟
    public void feed(Bird b) {
        b.eat();
        b.fly();
    }*/
//这个方法可以饲养所有动物
    public void feed(Animal a) {//Animal a=new Car()多态原理
                                //Animal a=new Bird()
        a.eat();//我们通过多态调用子类特有方法，可以提高代码复用性
        /*  a.catchMouse();
        a.fly();*/

      /*  Cat c=(Cat)a;//把猫重新回归本色，原来扮演动物角色，现在扮演猫角色
                     //当传入new Cat，相当于Cat c=new Cat();
                     //ClassCastException（强制类型转换异常）
                     //当传入new Bird，Cat c=(Cat)new Bird();//由于猫和鸟是平级的两个事物，所以不能强转
        c.catchMouse();*/
        if (a instanceof Cat) {//检测Cat temp=new Cat();运算符结果为true
            Cat c=(Cat) a;  //当传入new Cat,检测Cat temp=new Cat();true
            c.catchMouse();//当传入new Bird,检测Cat temp=new Bird();false
        }
        if (a instanceof Bird) {
            Bird b=(Bird) a;
            b.fly();
        }
    }

}
